package host

import (
	"g_ansible/ansible/model"
	"g_ansible/global"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
	"strings"
)

func Query() []model.V1Group {
	cfg := global.Ini
	// 遍历所有节(sections)
	//var Ini model.Ini
	var group []model.V1Group
	for _, section := range cfg.Sections() {
		var tmpgroup model.V1Group
		sectionName := section.Name()
		// 跳过默认节
		if sectionName == "DEFAULT" {
			continue
		}

		section := cfg.Section(sectionName)
		for _, i3 := range section.Keys() {
			//testhost
			//ansible_host=192.168.1.100 ansible_port=22 ansible_ssh_user=root ansible_ssh_pass=testpass
			var tmpHost model.Host
			//主机别名
			tmpHost.Alias = i3.Name()
			//IP地址
			s2 := strings.Split(i3.Value(), " ")

			// 解析 ansible_host
			if len(s2) > 0 {
				p := strings.Split(s2[0], "=")
				if len(p) > 1 {
					tmpHost.AnsibleHost = p[1]
				}
			}

			// 检查是否有足够的元素来解析端口
			if len(s2) > 1 {
				//端口号
				p := strings.Split(s2[1], "=")
				if len(p) > 1 {
					atoi, err := strconv.Atoi(p[1])
					if err != nil {
						// 如果转换失败，使用默认端口22
						tmpHost.AnsiblePort = 9999
					} else {
						tmpHost.AnsiblePort = atoi
					}
				} else {
					// 如果分割后没有等号，使用默认端口22
					tmpHost.AnsiblePort = 9999
				}
			} else {
				// 如果没有端口配置，使用默认端口22
				tmpHost.AnsiblePort = 22
			}

			// 检查是否有足够的元素来解析ssh用户
			if len(s2) > 2 {
				//ssh用户
				su := strings.Split(s2[2], "=")
				if len(su) > 1 {
					tmpHost.AnsibleSshUser = su[1]
				} else {
					// 如果没有等号，使用默认用户
					tmpHost.AnsibleSshUser = "root"
				}
			} else {
				// 如果没有用户配置，使用默认用户
				tmpHost.AnsibleSshUser = "root"
			}

			// 检查是否有足够的元素来解析ssh密码
			if len(s2) > 3 {
				//密码
				sp := strings.Split(s2[3], "=")
				if len(sp) > 1 {
					tmpHost.AnsibleSshPass = sp[1]
				} else {
					// 如果没有等号，使用空密码
					tmpHost.AnsibleSshPass = ""
				}
			} else {
				// 如果没有密码配置，使用空密码
				tmpHost.AnsibleSshPass = ""
			}

			tmpgroup.Name = sectionName
			tmpgroup.Host = append(tmpgroup.Host, tmpHost)
		}
		group = append(group, tmpgroup)
		//Ini.Group = group
	}

	//for _, v := range group {
	//	fmt.Println("主机组", v.Name)
	//	for _, v := range v.Host {
	//		fmt.Println("主机别名:", v.Alias)
	//		fmt.Println("IP地址:", v.AnsibleHost)
	//		fmt.Println("端口号:", v.AnsiblePort)
	//		fmt.Println("ssh用户:", v.AnsibleSshUser)
	//		fmt.Println("ssh密码:", v.AnsibleSshPass)
	//	}
	//}

	return group
}

// 使用 Gin 的处理函数
func QueryHandler(c *gin.Context) {
	// 调用原始 Query 函数获取数据
	groups := Query()

	// 返回 JSON 响应
	c.JSON(http.StatusOK, groups)
}
